/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.com.asistencia.facade;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import pe.com.asistencia.bean.BeanAsistencia;
import pe.com.asistencia.bean.BeanM;
import pe.com.asistencia.bean.BeanPersonal;
import pe.com.asistencia.conexion.MySqlDbConn;
import pe.com.asistencia.dao.AsistenciaDAO;
import pe.com.asistencia.dao.PersonalDAO;
import pe.com.asistencia.util.Fechas;
import pe.com.asistencia.util.Reporteador;

/**
 *
 * @author Usuario
 */
public class AsistenciaFacade {
    public     void   cerrar(Connection con  ){
          if  (con!=null)
              try {
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(AsistenciaFacade.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public    Connection   abrir (){
         Connection   con = MySqlDbConn.obtenerConexion();
         return   con;
    }

    public BeanM procesarAsistencia(Integer dni, String fecha){
         BeanM resp = new BeanM();
         Connection con = abrir();
         boolean existe = false;
         //Buscar   curso
          BeanAsistencia   beanAsistencia = null;
          AsistenciaDAO    daoAsistencia=  new AsistenciaDAO();
          try {
                con.setAutoCommit(false);
                    beanAsistencia = new BeanAsistencia();
                    beanAsistencia.setDni(dni);
                    beanAsistencia.setFecha(fecha);
                existe = daoAsistencia.buscarRegistroAsistencia(beanAsistencia, con);

                if(existe){
                    System.out.print("1");                    
                //actualizar registro
                           daoAsistencia.controlSalida(beanAsistencia, con);
                           con.commit();
                           System.out.println("   Actualizar  OK");
                           resp.setError(false);
                           resp.setMensok("Se Actualizo exitosamente.");
                }else{
                   System.out.print("2");
                //insertar nuevo registro
                           daoAsistencia.controlEntrada(beanAsistencia, con);
                           con.commit();
                           System.out.println("   Registrar  OK");
                           resp.setError(false);
                           resp.setMensok("Se Registro exitosamente.");
                }
            } catch (SQLException ex) {
                   ex.printStackTrace();
                   resp.setError(true);
                   resp.setMenserror("Error con la base de datos.."+
                           ex.getLocalizedMessage());

                    try {
                        con.rollback();
                    } catch (SQLException ex1) {
                        Logger.getLogger(AsistenciaFacade.class.getName()).log(Level.SEVERE, null, ex1);
                    }
            }finally{
                cerrar(con);
            }
        
        return resp;
    }

     public  BeanM   reprte2(String  fecha){
        BeanM  resp =  new BeanM();
        Connection con = abrir();
        Fechas f = new Fechas();
        try {
            AsistenciaDAO   daoasistencia= new AsistenciaDAO();
            ArrayList <Map>  lista = new ArrayList<Map>();
            lista =daoasistencia.buscarPersonalAsistencia(fecha, con);
//          Reporteador   rep  =  new  Reporteador("D:/reporte", "report2.jrxml", "D:/reporte", "Asistencia"+f.getCustomizeFecha()+".pdf");
            Reporteador   rep  =  new  Reporteador(System.getProperty("user.dir"), "report2.jrxml", System.getProperty("user.dir"), "Asistencia"+f.getCustomizeFecha()+".pdf");
            boolean  b = rep.reporteConMap(lista);
            System.out.println("Reporte  generado correctamente");
            resp.setError(false);
            resp.setMensok("Reporte  generado  exitosamente");
        } catch (SQLException ex) {
                ex.printStackTrace();
                resp.setError(true);
                resp.setMenserror("Error al  crear el  reporte "+
                        ex.getLocalizedMessage());
            try {
                con.rollback();
            } catch (SQLException ex1) {
                Logger.getLogger(AsistenciaFacade.class.getName()).log(Level.SEVERE, null, ex1);
            }
        } finally {
            cerrar(con);
        }

        return   resp;
    }

         public  BeanM   agregarPersonal(BeanPersonal   bean){
        BeanM  resp =  new BeanM();
        Connection con = abrir();
        try {
            con.setAutoCommit(false);
            PersonalDAO   daopersonal = new PersonalDAO();
            if(daopersonal.buscarRegistroPersonal(bean, con)){
                System.out.println("El personal ya existe");
                resp.setError(true);
                resp.setMenserror("El personal ya existe");
            }else{
                daopersonal.agregar(bean, con);
                con.commit();
                System.out.println("Personal agregado correctamente");
                resp.setError(false);
                resp.setMensok("Personal  agregado exitosamente");
            }
        } catch (SQLException ex) {
                ex.printStackTrace();
                resp.setError(true);
                resp.setMenserror("Error con la  base de datos"+
                        ex.getLocalizedMessage());
            try {
                con.rollback();
            } catch (SQLException ex1) {
                Logger.getLogger(AsistenciaFacade.class.getName()).log(Level.SEVERE, null, ex1);
            }
        } finally {
            cerrar(con);
        }

        return   resp;
    }
}
